package com.example.ymm.modules1.service.hl;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.example.ymm.base.BaseService;
import com.example.ymm.model.CommonResult;
import com.example.ymm.model.TableList;
import com.example.ymm.model.YmPageDto;
import com.example.ymm.modules1.entity.hl.yw.YwApprove;
import com.example.ymm.modules1.entity.my.user.DbApprovalLog;
import com.example.ymm.modules1.entity.my.user.DbComment;
import com.example.ymm.modules1.query.hl.YwApproveQueryCriteria;
import com.example.ymm.modules1.query.hl.YwMoneyAffirmLogCountQueryCriteria;
import com.example.ymm.modules1.service.dto.heng.*;
import com.example.ymm.modules1.service.dto.heng.kq.KqCreateDto;

import java.util.List;

public interface YwApproveService extends BaseService<YwApprove> {

    TableList<YwApprove> list(YwApproveQueryCriteria criteria, YmPageDto ymPage);


    TableList<YwApprove> xftList(YwApproveQueryCriteria criteria, YmPageDto ymPage);


    List<YwApprove> queryAll(YwApproveQueryCriteria criteria);


    String getUserNo(String userName);


    /**
     * 提交审批前
     *
     * @param dto 审批提交参数
     */
    void approveCreateBefore(YwApproveCreateDto dto);


    ApproveRespond getTimingMap(String threadId);
    /**
     * 创建审批后
     * @param approveDto
     * @return
     */
    XftApproveCreateDto approveCreateAfter(XftApproveCreateDto approveDto);


    void approveDelete(String approveNo);

    /**
     * 审批 发起
     */
    void approveSubmit(XftApproveCreateDto submitDto);


    /**
     * 审批撤回
     * 
     *
     */
    void approveCancel(String approveId);


    /**
     * 审批作废
     * @param approveId
     */
    void approveAbolish(String approveId);


    /**
     * 导入采集表数据-配送费
     * @param
     * @return
     */
    JSONArray importJsonDataPeiSong(YwApprove approve,String approvalName,DbApprovalLog approvalLog);


    /**
     * 导入采集表数据-业务员抽成
     * @param
     * @return
     */
    JSONArray importJsonYwChouCheng(YwApprove approve,String approvalName,DbApprovalLog approvalLog);


    //审批结束
    void approveEndEvent(JSONObject jsonObject);


    /**
     * 同步到数据采集表
     */
    void syncTable();


    YwApprove findByApproveNo(String approveNo);


    /**
     * ----------------------以上是薪福通的审批 以下是自研系统的审批----------------
     */

    /**
     * 业务员提成 发起前查看审批人
     * @param
     * @return
     */
    ApprovalCreateViewDto ywApprovalCreateView(String approvalName,String title);


    ApprovalCreateViewDto ywApprovalLogView(String approveNo);

    /**
     * 业务员提成 提起审批
     */
    ApproveRespond ywApprovalSubmit(YwApproveCreateDto dto);


    /**
     * 业务员提成  文件 提起审批
     */
    ApproveRespond ywApprovalFileSubmit(YwApproveCreateK3Dto dto);


    void ywApprovalPass(YwApprovaPassDto dto);


    /**
     提起人撤回
     */
    void ywApprovalCancel(String approveNo);


    void ywApprovalRemove(String approveNo);

    /**
     审批驳回
     */
    void ywApprovalBack(YwApprovaPassDto dto);

    /**
     *添加审批评论
     */
    void addYwComment(YwApprovaPassDto dto);


    /**
     * 钟部----------开始---------
     */
    /**
     * 钟部审批待抽成列表
     * 撤销 和拒绝 要删除  YwApprove数据
     * @param criteria
     * @return
     */


    /**
     * 发起审批
     * @param dto
     * @return
     */
    ApproveRespond ywPostageSubmit(YwPostageCreateDto dto);

    /**
     配送费 -提起人撤回
     */
    void ywPostageCancel(String approveNo);

    /**
     * 通用-审批通过
     * @param dto
     */
    void commonPass(YwApprovaPassDto dto);


    /**
     通用 -提起人撤回
     */
    void commonCancel(String approveNo);


    /**
     通用 - 审批驳回
     */
    void commonBack(YwApprovaPassDto dto);


    /**
     * 通用-审批进度
     * @param approveNo
     * @return
     */
    ApprovalCreateViewDto commonView(String approveNo);


    /**
     * 车间考勤
     */

    ApproveRespond chejianKqSubmit(KqCreateDto dto);

    void chejianKqPass(YwApprovaPassDto dto);

    void chejianKqCancel(YwApprovaPassDto dto);

    void chejianKqBack(YwApprovaPassDto dto);
}
